import Vue from 'vue'
import Vuex from 'vuex'
//导入日志插件
import createLogger from 'vuex/dist/logger'
//导入持久化插件
import createPersistedState from "vuex-persistedstate";
import { Toast } from 'vant';
import {shop_favlist,shop_unfav,shop_fav,shopcart_list,shopcart_clear,shopcart_add,shopcart_sub,address_add,address_list,address_del,address_edit} from '../utils/api'
Vue.use(Vuex)
Vue.use(Toast);
// vuex的特点:
// 1.集中管理应用程序的状态
// 2.实现多组件通信
// 3.vuex是独立于任何组件存在的.
// 4.vuex中的数据 刷新会丢失.

export default new Vuex.Store({
  state: {
    userid:"",
    id:[],
    collectlist: [],
    searchArr:[],
    searchlist:[],
    shopcartlist:[],
    addresslist:[],
  },
  getters: {
  },
  mutations: {
    // 存储用户userid
    save_id(state,payload){
      state.userid = payload;
    },
    collect(state,payload){ //收藏一个店铺
      state.collectlist.push( payload );
      Toast({
        message: '已收藏',
        icon: 'passed',
      });
    },
    cancel_collect(state,payload){ //取消收藏一个店铺
      var index = state.collectlist.findIndex((item)=>{
        return item.mtWmPoiId == payload.mtWmPoiId;
      })
      if( index != -1 ){
        state.collectlist.splice(index,1);
      }
      Toast({
        message: '已取消收藏',
        icon: 'passed',
      });
    },
    search(state,payload){//搜索一个店铺
      state.searchArr.push(payload);
    },
    render(state,payload){//渲染一个店铺
      state.searchlist = payload;
      console.log(state.searchlist);
    },
    save_favlist(state,payload){//保存收藏列表
      state.collectlist = payload;
    },
    save_shopcartlist(state,payload){//保存购物车列表
      state.shopcartlist = payload;
    },
    clear(state){//清空购物车列表
      state.shopcartlist = [];
    },
    shopcart_add(state,payload){//数量加1
      var index = state.shopcartlist.findIndex((item)=>{
        return item.id == payload.id;
      })
      if(index != -1){//该商品已经在购物车中
        state.shopcartlist[index].count++;
      }else{//该商品是第一次加入购物车
        // 深拷贝商品对象，对深拷贝的对象添加count属性，值为1
        var good = JSON.parse(JSON.stringify(payload))
        good.count = 1;
        state.shopcartlist.push(good);
      }
    },
    shopcart_sub(state,payload){//数量减1
      var index = state.shopcartlist.findIndex((item)=>{
        return item.id == payload.id;
      })
      if(state.shopcartlist[index].count>0){//该商品已经在购物车中
        state.shopcartlist[index].count--;
      }
      // }else{//该商品是第一次加入购物车
      //   // 深拷贝商品对象，对深拷贝的对象添加count属性，值为1
      //   var good = JSON.parse(JSON.stringify(payload))
      //   good.count = 1;
      //   state.shopcartlist.push(good);
      // }
    },
    address_build(state,payload){//新增地址
      state.addresslist.push(payload);
    },
    save_address_list(state,payload){//地址列表获取
      state.addresslist = payload;
    },
    detele_id(state,payload){//删除地址
      var index = state.addresslist.findIndex((item)=>{
        return item.id == payload;
      })
      if( index != -1 ){
        state.addresslist.splice(index,1,payload);
      }
    },
    address_edit(state,payload){//修改地址
      state.addresslist.push(payload);
    }

  },
  actions: {
    request_favlist({ commit }){//发请求获取店铺列表
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      // 发请求获取当前用户的收藏列表
      shop_favlist({userid}).then((res)=>{
        console.log(res.data.list);
        commit('save_favlist',res.data.list)
      })
    },
    request_fav( store,payload ){//发请求收藏
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      // 发请求，收藏店铺到服务器，数据库
      shop_fav({userid,shopid:payload.mtWmPoiId}).then((res)=>{
        if(res.data.code ==200){
          // 调用同步方法，收藏到vuex
          store.commit('collect',payload);
        }
      })
    },
    request_unfav( store , payload){
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      // 发请求，从服务器取消收藏店铺
      shop_unfav( { userid ,shopid:payload.mtWmPoiId } ).then((res)=>{
        if(res.data.code == 200){
          // 调用同步方法 从vuex取消收藏
          store.commit('cancel_collect',payload);
        }
      })
    },
    request_shopcartlist( store,){
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      // 发请求，获取购物车列表
      shopcart_list( { userid } ).then((res)=>{
        if(res.data.code == 200){
          store.commit('save_shopcartlist',res.data.list);
        }
      })
    },
    request_clear(store){//发请求，获取购物车列表
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_clear({userid}).then((res)=>{
        if(res.data.code == 200){
          // 调用同步方法，将本地vuex中的购物车数据也清空
          store.commit('clear');
        }
      })
    },
    request_shopcart_add(store,payload){//发请求，获取购物车列表
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_add({userid,goodid:payload.id}).then((res)=>{
        if(res.data.code == 200){
          store.commit('shopcart_add',payload);
        }
      })
    },
    request_shopcart_sub(store,payload){//发请求，获取购物车列表
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_sub({userid,goodid:payload.id}).then((res)=>{
        if(res.data.code == 200){
          store.commit('shopcart_sub',payload);
        }
      })
    },
    request_address_build(store,payload){//发请求 新增地址
       address_add(payload).then((res)=>{
        if(res.data.code == 200){
          store.commit('address_build',payload);
          // console.log(state.addresslist);
        }
      })
    },
    request_address_list(store,payload){//发请求，获取地址列表
      // 获取本地存储中的用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      address_list({userid}).then((res)=>{
        if(res.data.code == 200){
          store.commit('save_address_list',res.data.list);
        }
      })
    },
    request_address_delete(store,payload){//发请求，删除地址
       // 获取本地存储中的用户id
      //  var userid = JSON.parse(localStorage.getItem('userinfo')).id;
       address_del(payload).then((res)=>{
        if(res.data.code == 200){
          store.commit('detele_id',payload);
        }
       })
    },
    request_address_edit(store,payload){//发请求，编辑地址
      address_edit(payload).then((res)=>{
        store.commit('address_edit',payload);
      })
    }
  },
  modules: { //分模块管理state中的数据
    
  },
  //配合其他插件 管理vuex中state内部的数据
  plugins:[ createLogger(),createPersistedState() ]
})